#include <REGX52.H>
#include "uart.c"
#include "lcd12864.c"
unsigned char code numbers_2[][5] =
    {
        {0x00, 0x3E, 0x41, 0x41, 0x3E}, /*"0",9*/
        {0x00, 0x00, 0x42, 0x7F, 0x40}, /*"1",0*/
        {0x00, 0x62, 0x51, 0x49, 0x46}, /*"2",1*/
        {0x00, 0x22, 0x49, 0x49, 0x36}, /*"3",2*/
        {0x00, 0x38, 0x26, 0x7F, 0x20}, /*"4",3*/
        {0x00, 0x4F, 0x49, 0x49, 0x31}, /*"5",4*/
        {0x00, 0x3E, 0x49, 0x49, 0x32}, /*"6",5*/
        {0x00, 0x03, 0x71, 0x09, 0x07}, /*"7",6*/
        {0x00, 0x36, 0x49, 0x49, 0x36}, /*"8",7*/
        {0x00, 0x26, 0x49, 0x49, 0x3E}, /*"9",8*/
};

unsigned char code numbers_1[] =
    {
        0x00, 0x3E, 0x41, 0x41, 0x3E, /*"0",9*/
        0x00, 0x00, 0x42, 0x7F, 0x40, /*"1",0*/
        0x00, 0x62, 0x51, 0x49, 0x46, /*"2",1*/
        0x00, 0x22, 0x49, 0x49, 0x36, /*"3",2*/
        0x00, 0x38, 0x26, 0x7F, 0x20, /*"4",3*/
        0x00, 0x4F, 0x49, 0x49, 0x31, /*"5",4*/
        0x00, 0x3E, 0x49, 0x49, 0x32, /*"6",5*/
        0x00, 0x03, 0x71, 0x09, 0x07, /*"7",6*/
        0x00, 0x36, 0x49, 0x49, 0x36, /*"8",7*/
        0x00, 0x26, 0x49, 0x49, 0x3E, /*"9",8*/
};

// unsigned char code pic[] = {
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
//     0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
//     0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFC, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF7,
//     0x03, 0x03, 0x83, 0x83, 0x83, 0x83, 0x83, 0xC3, 0xC3, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0xF8, 0xF8, 0xFE, 0x7E, 0x7E, 0x7E, 0x7E,
//     0x7E, 0xFE, 0xFE, 0xFC, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF,
//     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFE,
//     0xFE, 0xFE, 0x7E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x1E, 0x0E, 0x0E, 0x1E, 0x1E, 0x1E,
//     0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//     0xE0, 0x80, 0x83, 0x83, 0x83, 0x83, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00,
//     0x00, 0x00, 0xE0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xF0, 0xF0, 0xF0, 0xF0,
//     0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFC, 0xFC, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF,
//     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03,
//     0x03, 0x03, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x00, 0x00, 0x00,
//     0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
//     0x1E, 0x1E, 0x1E, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x07, 0x07, 0x07, 0x07,
//     0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00,
//     0x00, 0x00, 0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x1F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
//     0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
//     0x0F, 0x0F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1E, 0x1E, 0x1E, 0x1E, 0x1C, 0x1C, 0x1C,
//     0x1C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xC0, 0xF0, 0xF0,
//     0xF8, 0xF8, 0xF8, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0xF8, 0xF8, 0xF8, 0xF8, 0xE0, 0xE0, 0xE0,
//     0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
//     0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF8, 0xF8, 0xF8, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
//     0x78, 0x78, 0x38, 0x38, 0x38, 0x3C, 0x3C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0,
//     0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0,
//     0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//     0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
//     0xFF, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7,
//     0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x7F, 0x3F, 0x00, 0x00,
//     0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0x70, 0x78, 0x78, 0x78, 0x78,
//     0x78, 0x78, 0x78, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF,
//     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF,
//     0xFF, 0x7F, 0x7E, 0x7E, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1F, 0x1F, 0x1F, 0x3F,
//     0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0x70, 0x70, 0x70, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x0F,
//     0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF,
//     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0x70, 0x70,
//     0x70, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x30, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF,
//     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xF3, 0xF3, 0xF3,
//     0xC0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03,
//     0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
//     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
//     0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03,
//     0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

unsigned char code word[] = {
    0xFF, 0x09, 0x91, 0x61, 0x91, 0x09, 0x91, 0x61,
    0x91, 0x09, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x0F, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
    0x08, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, /*"网",0*/
    0x10, 0xFF, 0x10, 0x00, 0xFA, 0x2A, 0x2A, 0xFF,
    0x2A, 0x2B, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x0F, 0x00, 0x00, 0x02, 0x06, 0x0A, 0x02,
    0x0A, 0x0F, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, /*"博",1*/
};

void display_num(unsigned char page, unsigned char col, unsigned char num)
{
    unsigned char bytes_per_num = 5;
    unsigned char i;

    // 一维数组
    for (i = 0; i < bytes_per_num; i++)
    {
        lcd_display_one_byte_in_page(page, col + i, numbers_1[i + num * bytes_per_num]);
    }

    // 二维数组
}

void display_num_two(
    unsigned char page,
    unsigned char col,
    unsigned char num)
{
    unsigned char bytes_per_num = 5;
    unsigned char i;

    // 二维数组
    for (i = 0; i < bytes_per_num; i++)
    {
        lcd_display_one_byte_in_page(page, col + i, numbers_2[num][i]);
    }
}

// void display_pic()
// {
//     unsigned char page, i;
//     unsigned int pos = 0;
//     for (page = 0; page < 8; page++)
//     {
//         lcd_write_command(0xB8 | page, 0);
//         lcd_write_command(0x40, 0);
//         for (i = 0; i < 64; i++)
//         {
//             lcd_write_data(pic[pos++], 0);
//         }
//         lcd_write_command(0xB8 | page, 1);
//         lcd_write_command(0x40, 1);
//         for (i = 0; i < 64; i++)
//         {
//             lcd_write_data(pic[pos++], 1);
//         }
//     }
// }

void display_words(
    unsigned char page,
    unsigned char col,
    unsigned char target[],
    unsigned int count)
{
    unsigned char i, j;
    for (i = 0; i < count; i++)
    {
        // 一个字，一个页写16byte
        for (j = 0; j < 16; j++)
        {
            lcd_display_one_byte_in_page(page, col + j + i * 16, target[i * 32 + j]);
        }
        // 第二页
        for (j = 0; j < 16; j++)
        {
            lcd_display_one_byte_in_page(page + 1, col + j + i * 16, target[i * 32 + 16 + j]);
        }
    }
}

void main()
{
    unsigned char i;
    uart_init();
    lcd_init();
    lcd_clean_screen();

    // for (i = 0; i < 8; i++)
    // {
    //     display_num(i, 0, i);
    // }

    // for (i = 0; i < 8; i++)
    // {
    //     display_num(i, 20, i);
    // }

    // display_pic();

    display_words(3, 30, word, 2);
    // lcd_display_one_byte_in_page(3, 30, 0xFF);
    // lcd_display_one_byte_in_page(3, 31, 0x00);
    // lcd_display_one_byte_in_page(3, 31, word[1]);
    // lcd_display_one_byte_in_page(3, 32, word[2]);
    // lcd_display_one_byte_in_page(3, 33, word[3]);

    while (1)
    {
    }
}